//Copyright 2012 Trevin Liberty
//GNU GPL v3
//Author: Trevin Liberty

#ifndef SWORDSMEN_OWNED_STATES_H
#define SWORDSMEN_OWNED_STATES_H

#include "State.h"

class Swordsmen;

///Some state

class WaitS : public State<Swordsmen>
{
private:
  
  WaitS(){}
  
  //copy ctor and assignment should be private
  WaitS(const WaitS&);
  WaitS& operator=(const WaitS&);
 
public:

  static WaitS* Instance();
  
public:
  
  virtual void Enter(Swordsmen* swordsmen);

  virtual void Execute(Swordsmen* swordsmen);

  virtual void Exit(Swordsmen* swordsmen);

};

///Some state

class MoveS : public State<Swordsmen>
{
private:
  
  MoveS(){}
  
  //copy ctor and assignment should be private
  MoveS(const MoveS&);
  MoveS& operator=(const MoveS&);
 
public:

  static MoveS* Instance();
  
public:
  
  virtual void Enter(Swordsmen* swordsmen);

  virtual void Execute(Swordsmen* swordsmen);

  virtual void Exit(Swordsmen* swordsmen);

};

///Some state

class AttackS : public State<Swordsmen>
{
private:
  
  AttackS(){}
  
  //copy ctor and assignment should be private
  AttackS(const AttackS&);
  AttackS& operator=(const AttackS&);
 
public:

  static AttackS* Instance();
  
public:
  
  virtual void Enter(Swordsmen* swordsmen);

  virtual void Execute(Swordsmen* swordsmen);

  virtual void Exit(Swordsmen* swordsmen);

};


#endif